/**
 * webuploader 工具类
 *
 * uploadUrl: 图片上传路径
 * uploadBtnId: 上传按钮的id
 * uploadPreId:图片预览框的id
 * fileSizeLimit: 图片上传最大限制
 * uploadBarId: 上传进度条
 *
 *  // 使用示例初始化图片上传
 var avatarUp = new $WebUpload("avatar",'/upload');
 avatarUp.setUploadBarId("progressBar");
 avatarUp.init();

 */
(function() {
    var $WebUpload = function(opt) {
        this.pictureId = opt.pictureId;
        this.uploadBtnId = opt.pictureId + "BtnId";
        this.uploadPreId = opt.pictureId + "PreId";

        this.uploadUrl =opt.url;

        this.fileSizeLimit = 100 * 1024 * 1024;
        if(opt.fileSizeLimit)
            this.fileSizeLimit = opt.fileSizeLimit;

        this.picWidth = 800;
        this.picHeight = 800;

        if(opt.picWidth){
            this.picWidth = opt.picWidth;
            this.picHeight = opt.picHeight;
        }
        this.uploadBarId = null;


        this.accept=  // 只允许选择图片文件。
            {
                title : 'Images',
                extensions : 'gif,jpg,jpeg,bmp,png,webp',
                mimeTypes : 'image/gif,image/jpg,image/jpeg,image/bmp,image/png,image/webp'
            };

        if(opt.accept)
            this.accept=opt.accept;

        this.success=opt.success;

    };

    $WebUpload.prototype = {
        /**
         * 初始化webUploader
         */
        init : function(opt) {
            var uploader = this.create(opt);
            this.bindEvent(uploader,opt);
            return uploader;
        },

        /**
         * 创建webuploader对象
         */
        create : function(opt) {

            var cur=new Object();



            var webUploader = WebUploader.create({
                // 选完文件后，是否自动上传。
                auto : true,
                // 选择文件的按钮。可选。
                // 内部根据当前运行是创建，可能是input元素，也可能是flash.
                pick : {
                    id : '#' + this.uploadBtnId,
                    multiple : false,// false只上传一个，true可以上传多个
                },
                accept: this.accept,

                // swf文件路径
                swf : '/plugins/webuploader-0.1.5/Uploader.swf',
                //是否禁掉整个页面的拖拽功能
                disableGlobalDnd : true,
                //是否可以重复上传
                duplicate : true,
                //文件上传的服务器端
                server : this.uploadUrl,
                // 文件最大限制
                fileSingleSizeLimit : this.fileSizeLimit
                //如需获取更多的配置参数查看http://fex.baidu.com/webuploader/doc/index.html 文档
            });

            return webUploader;
        },

        /**
         * 绑定事件
         */
        bindEvent : function(bindedObj,opt) {
            var me =  this;
            bindedObj.on('fileQueued', function(file) {
                /*这里默认设置上传图片大小宽高100px*/
                var $li = $('<div><img width="100px" height="100px"></div>');
                var $img = $li.find('img');

                $("#" + me.uploadPreId).html($li);

                // 生成缩略图
                bindedObj.makeThumb(file, function(error, src) {
                    if (error) {
                        $img.replaceWith('<span>不能预览</span>');
                        return;
                    }
                    $img.attr('src', src);
                }, me.picWidth, me.picHeight);
            });

            // 文件上传过程中创建进度条实时显示。
            bindedObj.on('uploadProgress', function(file, percentage) {
                $("#"+me.uploadBarId).css("width",percentage * 100 + "%");
            });

            // 文件上传成功，给item添加成功class, 用样式标记上传成功。
            bindedObj.on('uploadSuccess', function(file,response) {
                //Feng.success("上传成功");
                //$("#" + me.pictureId).val(response);
                if(opt.success)
                    opt.success(file,response);

            });

            // 文件上传失败，显示上传出错。
            bindedObj.on('uploadError', function(file) {
                Feng.error("上传失败");
            });

            // 其他错误
            bindedObj.on('error', function(type) {
                if ("Q_EXCEED_SIZE_LIMIT" == type) {
                    Feng.error("文件大小超出了限制");
                } else if ("Q_TYPE_DENIED" == type) {
                    Feng.error("文件类型不满足");
                } else if ("Q_EXCEED_NUM_LIMIT" == type) {
                    Feng.error("上传数量超过限制");
                } else if ("F_DUPLICATE" == type) {
                    Feng.error("图片选择重复");
                } else {
                    Feng.error("上传过程中出错");
                }
            });

            // 完成上传完了，成功或者失败
            bindedObj.on('uploadComplete', function(file) {
            });
        },

        /**
         * 设置图片上传的进度条的id
         */
        setUploadBarId: function (id) {
            this.uploadBarId = id;
        }
    };
    window.$WebUpload = $WebUpload;
}());